package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.UsuarioDetRequest;
import com.sisgesbyte.dao.seguridad.MantenimientoUsuarioDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.UsuarioListaEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.UsuarioBean;
import com.sisgesbyte.services.sistema.bean.UsuarioListaResponse;

@Stateless
public class MantenimientoUsuarioImpl implements MantenimientoUsuario {

	@EJB
	private MantenimientoUsuarioDao mantenimientoUsuarioDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public UsuarioListaResponse listarUsuarios(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		
		String mensajeTransaccionMetodo = "[listarUsuarios idTx=" + codTransaccion + "] - ";
		UsuarioListaResponse response = new UsuarioListaResponse();
		try{
			
			response.setIdTransaccion(codTransaccion);
			List<UsuarioListaEntity> reqUsuario = null;
			
			try{
				reqUsuario= mantenimientoUsuarioDao.listaUsuarios(cadenaFiltros);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error a traer lista de usuarios de la BD " +e);
			}
			
			if(reqUsuario.size() > 0){
				
				List<UsuarioBean> listaUsuario = new ArrayList<UsuarioBean>();
				
				for(UsuarioListaEntity row : reqUsuario){
					UsuarioBean bean = new UsuarioBean();
					bean.setId(row.getId());
					bean.setCodEmpresa(row.getCodempresa());
					bean.setEmpresa(validaciones.validarCamposString(row.getEmpresa()));
					bean.setRolId(row.getRol_id());
					bean.setRol(validaciones.validarCamposString(row.getRol()));
					bean.setActive(row.getActive());
					bean.setUsuario(validaciones.validarCamposString(row.getUsuario()));
					bean.setClave(validaciones.validarCamposString(row.getClave()));
					listaUsuario.add(bean);
				}
				response.setListaUsuarios(listaUsuario);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_USUARIO_COD_IDF29);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_USUARIO_MSJ_IDF29);				
			}
		}catch(Exception e){
			System.out.println( mensajeTransaccionMetodo +"Ocurrio un error en el proceso de listarUsuarios " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_USUARIO_COD_IDT30);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_USUARIO_MSJ_IDT30);
		}
		return response;
	}

	@Override
	public GenericResponse nuevoUsuario(String codTransaccion, UsuarioBean usuario) {
		
		String mensajeTransaccionMetodo = "[listarUsuarios idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity reqUsuario = null;
			response.setIdTransaccion(codTransaccion);
			UsuarioDetRequest newUsuario = new UsuarioDetRequest();
			newUsuario.setCodEmpresa(validaciones.validarCampoInteger(usuario.getCodEmpresa()));
			newUsuario.setCodRol(validaciones.validarCampoInteger(usuario.getRolId()));
			newUsuario.setUsuario(validaciones.validarCamposString(usuario.getUsuario()));
			newUsuario.setClave(validaciones.validarCamposString(usuario.getClave()));
			newUsuario.setActive(usuario.getActive());
			try{
				reqUsuario = mantenimientoUsuarioDao.guardarUsuario(newUsuario);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el usuario en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_COD_IDT31);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_MSJ_IDT31);
			}
			
			if(reqUsuario.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_COD_IDF30);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_MSJ_IDF30);
			}
			
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_COD_IDT31);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_USUARIO_MSJ_IDT31);
		}
		
		return response;
	}

	@Override
	public GenericResponse editUsuario(String codTransaccion, UsuarioBean usuario) {
	 
		String mensajeTransaccionMetodo = "[editUsuario idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity reqUsuario = null;
			response.setIdTransaccion(codTransaccion);
			UsuarioDetRequest editUsuario = new UsuarioDetRequest();
			editUsuario.setCodUsuario(usuario.getId());
			editUsuario.setCodEmpresa(validaciones.validarCampoInteger(usuario.getCodEmpresa()));
			editUsuario.setCodRol(validaciones.validarCampoInteger(usuario.getRolId()));
			editUsuario.setUsuario(validaciones.validarCamposString(usuario.getUsuario()));
			editUsuario.setClave(validaciones.validarCamposString(usuario.getClave()));
			editUsuario.setActive(usuario.getActive());
			
			try{
				reqUsuario = mantenimientoUsuarioDao.actualizarUsuario(editUsuario);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar en BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_USUARIO_COD_IDT32);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_USUARIO_MSJ_IDT32);
			}
			
			if(reqUsuario.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_USUARIO_COD_IDF31);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_USUARIO_MSJ_IDF31);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_USUARIO_COD_IDT32);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_USUARIO_MSJ_IDT32);
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteUsuario(String codTransaccion, int codUsuario) {
		 
		String mensajeTransaccionMetodo = "[deleteUsuario idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		try{
			response.setIdTransaccion(codTransaccion);
			GenericEntity reqUsuario = mantenimientoUsuarioDao.eliminarUsuario(codUsuario);
			
			if(reqUsuario.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_USUARIO_COD_IDF31);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_USUARIO_MSJ_IDF31);
			}
						
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_USUARIO_COD_IDT32);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_USUARIO_MSJ_IDT32);
		}
		
		return response;
	}

}
